﻿#pragma once
#include "CLIProducts.h"

using namespace System;
using namespace System::Collections::Generic;



namespace $RootNamespace$
{


  /// The 'CLIAbstractFactory' abstract class
  private ref class CLIAbstractFactory abstract

  {

public:
	virtual $AbstractProductA$ ^CreateProductA() abstract;

	virtual $AbstractProductB$ ^CreateProductB() abstract;

  };


	/// The 'Client' class. Interaction environment for the products.
	private ref class CLIClient
	{

	private:
		$AbstractProductA$ ^_$AbstractProductA$;

		$AbstractProductB$ ^_$AbstractProductB$;

		/// The main entry point for the application.
	public:
		[STAThread]
		static void Test();

		// Constructor
		CLIClient(CLIAbstractFactory ^factory);

		void Run();

	};

  /// The '$ConcreteFactory1$' class
  private ref class $ConcreteFactory1$ : CLIAbstractFactory

  {

public:
	virtual $AbstractProductA$ ^CreateProductA() override;

	virtual $AbstractProductB$ ^CreateProductB() override;

  };


  /// The '$ConcreteFactory2$' class
  private ref class $ConcreteFactory2$ : CLIAbstractFactory

  {

public:
	virtual $AbstractProductA$ ^CreateProductA() override;

	virtual $AbstractProductB$ ^CreateProductB() override;

  };


}


